/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioArticulo;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Articulo;

/**
 *
 * @author DESARROLLO01
 */
@Service
public class ServicioArticuloImpl implements IServicioArticulo, Serializable {

    @Inject
    private IDAOArticulo dAOArticulos;

    @Override
    public Collection<Articulo> listarArticulosActivos() throws ServiceException {
        try {
            return dAOArticulos.listarActivos(Articulo.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Articulo conseguirArticuloPorId(Integer idArticulo) throws ServiceException {
        try {
            return dAOArticulos.obtenerEntidadPorId(Articulo.class, idArticulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Articulo> listarTodosArticulos() throws ServiceException {
        try {
            return dAOArticulos.listarTodos(Articulo.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoValidacion validarArticulo(Articulo articulo) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio guardarArticulo(Articulo articulo) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //banco.setId(5);
            articulo.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            dAOArticulos.insertar(articulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarArticulo(Articulo articulo) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            dAOArticulos.actualizar(articulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<Articulo> listarArticulosPorFiltro(Articulo articulo) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("nombreComercial", articulo.getNombreComercial());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return dAOArticulos.obtenerColeccionEntidadPorFiltros(Articulo.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Articulo> obtenerArticuloBusqueda(Articulo articulo) throws ServiceException {
        try {
            return dAOArticulos.obtenerArticuloBusqueda(articulo);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Articulo obtenerArticuloPorNombreComercial(String nombreComercial) throws ServiceException {
        try {
            return dAOArticulos.obtenerArticuloPorNombreComercial(nombreComercial);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Articulo> listarArticulosPorCategoria(Articulo articulo) throws ServiceException {
        try {
            return dAOArticulos.obtenerArticulosPorCategoria(articulo);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Articulo> buscarArticulosPorModelo(Articulo articulo) throws ServiceException {
        try {
            return dAOArticulos.buscarArticulosPorModelo(articulo);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Articulo> obtenerReportePorModelo(Articulo articulo) throws ServiceException {
        try {
            return dAOArticulos.obtenerReportePorModelo(articulo);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<String> listarModelosDistintos(Articulo articulo) throws ServiceException {
        try {
            return dAOArticulos.listarModelosDistintos(articulo);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
}
